﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace Avanservices.ControlPanel
{
    public partial class Menu : System.Web.UI.UserControl
    {
        Variables var;
        ReglasNegocio.clsMenu _menu;

        //metodo de inicio. Carga de la pantalla incial
        protected void Page_Load(object sender, EventArgs e)
        {
            var = Session["Variables"] as Variables;
            LblTitulo.Text = "Menú";

            if (var == null)
                Response.Redirect("Login.aspx");
            else
            {
                _menu = new ReglasNegocio.clsMenu();
                //validamos la accion...
                string objeto = "";
                string[] objetoTemp;

                if (Request.Params["__EVENTTARGET"] != "" && Request.Params["__EVENTTARGET"] != null)
                {
                    objetoTemp = Request.Params["__EVENTTARGET"].ToString().Split('$');
                    objeto = objetoTemp[objetoTemp.Length - 1];
                }

                if (objeto != "linkNuevo" && objeto != "linkEditar" && objeto != "linkEliminar" && objeto != "linkAceptar" && objeto != "linkCancelar")
                {
                    if (objeto == "lnkBuscar")
                        gridDatos.CurrentPageIndex = 0;

                    LblMensaje.Visible = false;
                    gridDatos.DataSource = _menu.ObtenerMenu(var.Where, var.Orden);
                    gridDatos.DataBind();
                }
                else
                {
                    Accion.Value = lblAccion.Text;

                    //validamos la accion...
                    if (objeto == "linkNuevo")
                    {
                        linkNuevo_Click();
                    }
                    else if (objeto == "linkEditar")
                    {
                        linkEditar_Click(Request.Form["ctl00$Control2$Item_Id"]);
                    }
                    else if (objeto == "linkEliminar")
                    {
                        linkEliminar_Click(Request.Form["ctl00$Control2$Item_Id"]);
                    }
                }
            }
        }

        //Metodo para la creacion
        protected void linkNuevo_Click()
        {
            TablaListado.Visible = false;
            TablaDatos.Visible = true;
            TablaBotones.Visible = true;
            LblMensaje.Visible = true;
            LblMensaje.Text = "Ingrese el nuevo menú";

            cargarListas();

            //seteamos la variable de configuracion de nuevo
            Accion.Value = "1";
            lblAccion.Text = "1";
        }

        //Metodo para editar un elemento
        protected void linkEditar_Click(string itemid)
        {
            string id_item = itemid;
            TablaListado.Visible = false;
            TablaDatos.Visible = true;
            TablaBotones.Visible = true;
            LblMensaje.Visible = true;
            LblMensaje.Text = "Realice las modificaciones deseadas";

            DataTable datos = _menu.ObtenerMenuXId(Convert.ToInt32(id_item)).Tables[0];

            cargarListas();

            //llenamos los datos
            txtNombre.Text = datos.Rows[0]["Nombre"].ToString();
            txtURL.Text = datos.Rows[0]["URL"].ToString();

            if (datos.Rows[0]["Padre_Id"].ToString() != "")
                ddlPadre.SelectedValue = datos.Rows[0]["Padre_Id"].ToString();
            else
                ddlPadre.SelectedValue = "0";
            
            ddlEstatus.SelectedValue = datos.Rows[0]["Estatus_Id"].ToString();

            //seteamos las variables de configuracion de editar
            Accion.Value = "2";
            lblAccion.Text = "2";
            Item_Id.Value = id_item;
        }

        //Metodo para eliminar un elemento
        protected void linkEliminar_Click(string itemid)
        {
            string id_item = itemid;

            TablaListado.Visible = false;
            TablaDatos.Visible = false;
            TablaBotones.Visible = true;
            LblMensaje.Visible = true;
            LblMensaje.Text = "¿Está seguro que desea eliminar el menú seleccionado?";

            //seteamos las variables de configuracion de editar
            Accion.Value = "3";
            lblAccion.Text = "3";
            Item_Id.Value = id_item;
        }

        //Metodo para Guardar los datos de un elemento nuevo, o uno existente 
        protected void linkAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                //Recuperamos los datos de los campos
                string Nombre = txtNombre.Text;
                string URL = txtURL.Text;
                string Padre = ddlPadre.SelectedValue;
                string Estatus = ddlEstatus.SelectedValue;

                int duplicado = 0;

                if (Accion.Value == "1")//nuevo elemento
                {
                    duplicado = _menu.Agregar(Nombre, URL, Convert.ToInt32(Padre), Convert.ToInt32(Estatus), Convert.ToInt32(var.CodigoUsuario));
                }
                else if (Accion.Value == "2")//editar elemento
                {
                    duplicado = _menu.Editar(Convert.ToInt32(Item_Id.Value), Nombre, URL, Convert.ToInt32(Padre), Convert.ToInt32(Estatus), Convert.ToInt32(var.CodigoUsuario));
                }
                else if (Accion.Value == "3")//eliminar elemento
                {
                    try
                    {
                        _menu.Eliminar(Convert.ToInt32(Item_Id.Value));
                        mostrarConfirmacion(Accion.Value, true);
                    }
                    catch (Exception ex)
                    {
                        mostrarConfirmacion(Accion.Value, false);
                    }
                }

                if (duplicado == 0 && Accion.Value != "3")
                {
                    mostrarConfirmacion(Accion.Value, true);
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Error", "<script language='javascript'>alert ('Registro duplicado: Ya existe un registro con este nombre. Por favor verifique los datos ingresados e intente nuevamente');</script>", false);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                mostrarConfirmacion("otro", false);
            }
        }

        //Metodo privado para limpiar los datos del formulario
        protected void limpiarDatos()
        {
            TablaListado.Visible = true;
            TablaDatos.Visible = false;
            TablaBotones.Visible = false;
            LblMensaje.Visible = false;
            TablaMensaje.Visible = false;

            //limpiar valores al cancelar.
            txtNombre.Text = "";
            txtURL.Text = "";

            //cargamos el listado...
            gridDatos.DataSource = _menu.ObtenerMenu(var.Where, var.Orden);
            gridDatos.DataBind();

        }

        //Metodo para cancelar el ingreso o edicion de un elemento
        protected void linkCancelar_Click(object sender, EventArgs e)
        {
            limpiarDatos();
        }

        //Metodo para aceptar el mensajede confirmación y regresar a la pantalla con el listado
        protected void linkAceptar2_Click(object sender, EventArgs e)
        {
            limpiarDatos();
        }

        //Metodo para la paginacion del grid
        protected void gridDatos_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
        {
            gridDatos.CurrentPageIndex = e.NewPageIndex;
            gridDatos.DataSource = _menu.ObtenerMenu(var.Where, var.Orden);
            gridDatos.DataBind();
        }

        protected void gridDatos_SortCommand(object source, DataGridSortCommandEventArgs e)
        {
            var.Orden = e.SortExpression;
            gridDatos.DataSource = _menu.ObtenerMenu(var.Where, var.Orden);
            gridDatos.DataBind();
            Session["Variables"] = var;
        }

        private void cargarListas()
        {
            //MENU PADRE
            ddlPadre.DataSource = _menu.ObtenerMenuPadre();
            ddlPadre.DataTextField = "Nombre";
            ddlPadre.DataValueField = "Id";
            ddlPadre.DataBind();
            ListItem item = new ListItem();
            item.Text = "- Seleccione -";
            item.Value = "0";
            ddlPadre.Items.Insert(0, item);

            //ESTATUS
            ReglasNegocio.clsComunes comunes = new ReglasNegocio.clsComunes();
            ddlEstatus.DataSource = comunes.ObtenerEstatusEstandar();
            ddlEstatus.DataTextField = "Nombre";
            ddlEstatus.DataValueField = "Id";
            ddlEstatus.DataBind();
            item = new ListItem();
            item.Text = "- Seleccione -";
            item.Value = "0";
            ddlEstatus.Items.Insert(0, item);

        }

        private void mostrarConfirmacion(string accionForm, bool esExitoso)
        {
            TablaDatos.Visible = false;
            TablaBotones.Visible = false;
            TablaListado.Visible = false;
            TablaMensaje.Visible = true;
            LblMensaje.Visible = false;

            if (accionForm == "1") //New
            {
                LblMensaje2.Text = "El menú se ha registrado correctamente";
            }
            if (accionForm == "2") //Edit
            {
                LblMensaje2.Text = "El menú se ha modificado correctamente";
            }
            if (accionForm == "3") //Delete
            {
                if (esExitoso)
                {
                    LblMensaje2.Text = "El menú se ha eliminado correctamente";
                }
                else
                {
                    LblMensaje2.Text = "No se puede eliminar el menú porque está relacionado a otros registros del sistema.";
                }
            }
            if ((accionForm == "otro") && (!esExitoso))
            {
                LblMensaje2.Text = "No se puede realizar la operación solicitada. <BR>Por favor intente nuevamente";
            }
        }

    }
}